﻿namespace Demo.PetaPoco.Application.Dtos.Menu;

/// <summary>
/// 表示路由记录的数据传输对象（DTO），用于描述路由配置信息。
/// </summary>
public class RouteRecord
{
	/// <summary>
	/// 获取或设置路由对应的组件名称。
	/// 通常表示前端框架中渲染该路由的组件，例如 "UserList" 或 "Dashboard"。
	/// </summary>
	public string? Component { get; set; } = string.Empty;

	/// <summary>
	/// 获取或设置路由的名称。
	/// 该名称必须唯一，用于标识路由，例如在命名路由导航中使用。
	/// </summary>
	public string Name { get; set; } = string.Empty;

	/// <summary>
	/// 获取或设置路由的路径。
	/// 路径应以 "/" 开头（除非是子路由），支持动态参数，例如 "/users/:id"。
	/// </summary>
	public string? Path { get; set; }

	/// <summary>
	/// 获取或设置路由的别名。
	/// 允许为路由定义额外的路径，这些路径与主路径行为一致，例如 ["/u/:id"]。
	/// 可以是单个字符串或字符串数组。
	/// </summary>
	public object? Alias { get; set; } = null!;

	/// <summary>
	/// 获取或设置路由的重定向目标。
	/// 当直接匹配该路由时，会重定向到指定位置（在导航守卫之前触发）。
	/// 示例："/home" 或 "{ name: 'Home' }"。
	/// </summary>
	public string? Redirect { get; set; }

	/// <summary>
	/// 获取或设置路由的元数据。
	/// 包含路由的附加信息，例如权限、图标、标题等配置。
	/// </summary>
	public RouteMeta Meta { get; set; } = null!;

	/// <summary>
	/// 获取或设置该路由的子路由集合。
	/// 表示嵌套的路由结构，每个子路由也是一个 <see cref="RouteRecord"/>。
	/// </summary>
	public List<RouteRecord>? Children { get; set; }

	/// <summary>
	/// 获取或设置路由参数是否作为属性传递给组件。
	/// 可以是布尔值、对象或按路径分隔的对象，用于将路由参数注入到组件。
	/// 示例：true 或 { "userId": true }。
	/// </summary>
	public object? Props { get; set; }
}